package com.simpou.commons.model.behavior;

import java.io.Serializable;


/**
 * Indica que um objeto pode ser identificado unicamente dentro de um conjunto.
 *
 * @author Jonas Pereira
 * @since 2012-06-11
 * @version 2013-06-01
 */
public interface Identifiable<T extends Serializable> {
    /**
     * <p>identity.</p>
     *
     * @return Identificador único da entidade. Identificadores iguais entre dois objetos
     * significa que o o "equals" entre eles retorna "true" necessariamente.
     */
    T identity();

    /**
     * <p>updateIdentity.</p>
     *
     * @param id Identificador único da entidade. O "equals" do
     * objeto deve retornar "true" quando comparado com um outro que receba este
     * mesmo identificador.
     *
     * @throws UnsupportedOperationException Caso não se aplique ao contexto atual, ou operação não é permitida.
     */
    void checkedId(T id);

    void uncheckedId(Serializable id);
}
